💡 AI 인사이트

🤖 AI가 여기에 결과를 출력합니다...

댓글 커뮤니티

쿠팡이벤트

이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

검색

    [코담] 웹개발·실전 프로젝트·AI까지, 파이썬·장고의 모든것을 담아낸 강의와 개발 노트

    미니프로젝트 12 | ✅저자: 이유정(박사)

    프로젝트 코드명: UserDataValidator
    프로젝트 유형: 콘솔 기반 사용자 데이터 유효성 검사 및 저장

    🖥️ 프로젝트 개요

    사용자가 입력한 여러 명의 사용자 정보를 검증하고,
    - 이름, 나이, 이메일 형식을 검사한 뒤,
    - 유효한 데이터만 리스트에 저장하고
    - 유효하지 않은 항목은 에러 메시지로 출력하는 프로그램입니다.
    
    입력은 반복적으로 받으며, 사용자가 '종료'라고 입력하면 프로그램이 종료됩니다.
    

    ◽ 이 프로젝트를 통해 자연스럽게 적용되는 내용

    개념 적용 방식
    함수 정의 유효성 검증 함수 (이름/나이/이메일) 분리
    예외처리 입력값 형식 오류(ValueError, TypeError) 처리
    조건문 / 반복문 사용자 입력 루프 및 검증 흐름 제어
    리스트 유효한 사용자 정보를 저장

    📄 기능 요구사항 (Functional Requirements)

    • 이름, 나이, 이메일을 입력받음
    • 이름은 빈 문자열이 아니어야 함
    • 나이는 0 이상의 정수
    • 이메일은 @를 포함해야 함
    • 유효하지 않으면 메시지 출력
    • 유효하면 리스트에 저장
    • '종료' 입력 시 프로그램 종료 및 결과 출력

    📄 비기능 요구사항 (Non-Functional Requirements)

    • 모든 예외 상황은 종료 없이 메시지로 안내
    • 예외 메시지는 사용자 친화적으로 출력
    • 최소 함수 2개 이상 사용
    • 파일 저장은 필요 없음 (콘솔 출력만)

    ✅ 출력 포맷 구성:

    이름을 입력하세요: 홍길동  
    나이를 입력하세요: -3  
    ❌ 나이는 0 이상 정수여야 합니다.
    
    이름을 입력하세요: 이수연  
    나이를 입력하세요: 25  
    이메일을 입력하세요: sooyeon@example.com  
    ✅ 등록 완료
    
    ...
    입력이 완료된 사용자 목록:
    1. 이수연 (25세) - sooyeon@example.com
    

    ✅ 정답 코드:

    def validate_name(name):
        if not name.strip():
            raise ValueError("이름은 비어 있을 수 없습니다.")
        return name.strip()
    
    def validate_age(age_str):
        try:
            age = int(age_str)
            if age < 0:
                raise ValueError("나이는 0 이상 정수여야 합니다.")
            return age
        except ValueError:
            raise ValueError("나이는 정수여야 합니다.")
    
    def validate_email(email):
        if "@" not in email or "." not in email:
            raise ValueError("올바른 이메일 형식이 아닙니다.")
        return email.strip()
    
    users = []
    
    print("사용자 정보를 등록하세요. '종료'를 입력하면 끝납니다.")
    
    while True:
        name = input("이름을 입력하세요: ")
        if name.lower() == "종료":
            break
    
        try:
            name = validate_name(name)
            age = validate_age(input("나이를 입력하세요: "))
            email = validate_email(input("이메일을 입력하세요: "))
        except ValueError as e:
            print(f"❌ {e}")
            continue
    
        users.append({"name": name, "age": age, "email": email})
        print("✅ 등록 완료\n")
    
    print("\n입력이 완료된 사용자 목록:")
    for i, user in enumerate(users, 1):
        print(f"{i}. {user['name']} ({user['age']}세) - {user['email']}")
    

    🔍 코드 해설:

    • validate_name, validate_age, validate_email: 입력값마다 예외를 발생시키는 검증 함수
    • try-except로 예외가 발생하면 사용자에게 친절한 메시지를 출력하고 입력을 반복
    • 유효한 입력만 users 리스트에 저장
    • 종료 시 전체 사용자 목록을 출력
    TOP
    preload preload